4D Chart v13

Diagramme aus Arrays (Beispiele)

Home

 
4D Chart v13
Diagramme aus Arrays (Beispiele)

Diagramme aus Arrays (Beispiele)  


 

 

Dieser Abschnitt zeigt Beispiele für zwei- und dreidimensionale Diagramme, die mit der Funktion CT Chart arrays erstellt wurden.

Wie Sie zwei- und dreidimensionale Diagramme aus Datensätzen einer Datenbank erstellen, erfahren Sie im Abschnitt Diagramme aus Datensätzen einer Datenbank (Beispiele).

Jedes Beispiel enthält:

  • Eine Beschreibung der Ausgangssituation,
  • Die Struktur der Beispieldatenbank,
  • Ein Diagramm, das anhand der Beispieldaten komplett programmiert wurde,
  • Den Code zum Erstellen dieses Diagramms.

Nehmen wir an, Sie sind neuer Manager der Engineering Abteilung einer Firma, die Waren herstellt. Eine Ihrer Aufgaben ist, die Zeit herabzusetzen, welche die einzelnen Abteilungen benötigen, um Anfragen von Kunden zu beantworten.

Dafür richten Sie eine Datenbank ein, die die Antwortzeit der einzelnen Abteilungen verwaltet. Die Tabelle hierfür lautet:

Um die gesammelte Information zu analysieren, erstellen Sie für das vergangene Jahr ein Diagramm mit der im Monat durchschnittlich benötigten Zeit pro Abteilung. Der Durchschnittswert ergibt sich aus der Berechnung:
Datum der Antwort - Datum der Anfrage / Anzahl der Anfragen.

Mit 4D Chart erstellen Sie folgendes Diagramm:

Dieses Diagramm wurde mit der Methode DIAGRAMM ANTWORT erstellt. Sie füllt Arrays mit Daten, erstellt aus den Arrays ein Diagramm und passt dann einige Elemente individuell an, wie z.B. Bezeichnung der Achsen und Farben der Reihen.

Der erste Teil der Methode erstellt und füllt die Arrays mit Hilfe von 4th Dimension Befehlen und Funktionen. Der Inhalt des Array Kategorien ist fest vorgegeben, der Inhalt des Array Reihen stammt direkt aus der Datenbank, der Inhalt des Array Werte ergibt sich durch die Berechnung: Größe des Array Werte = Größe des Array Kategorien * Größe des Array Reihen.

Diese Methode verwaltet die Auswahl der Datensätze über Mengen. Haben Sie eine Menge erstellt, können Sie die Auswahl der benötigten Datensätze durch erneutes Suchen verändern und immer wieder zur Originalmenge der Datensätze zurückkehren. Diese Methode verwendet eine Menge, um die Auswahl der Datensätze für das ganze Diagramm zu bewahren. Die Auswahl wird nämlich beim Füllen des Array Werte verändert, da sich die Werte nach einer neuen Auswahl richten, die sich aus der Suche nach den Datensätzen pro Abteilung und pro Monat ergibt.

Sind die Arrays gefüllt, wird das Diagramm mit 4D Chart Routinen erstellt und angepasst.

Die Methode lautet:

  `Methode: DIAGRAMM ANTWORT
  `Kategorien: Monate des Jahres
  `Reihen: Namen der Abteilungen
  `Werte: Durchschnittliche Bearbeitungsdauer (in Tagen)
 
 C_LONGINT($x;$y;$z;$Counter)
 C_LONGINT($Left;$Top;$Right;$Bottom)
 C_LONGINT($Left2;$Top2;$Right2;$Bottom2)
 C_LONGINT($Area;$Chart;$Title;$Locate;$Duration;$Color;$Font)
 
  `Array Kategorien festlegen und füllen
 ARRAY STRING(3;$aCategories;12)
 $aCategories{1}:="Jan"
 $aCategories{2}:="Feb"
 $aCategories{3}:="Mär"
 $aCategories{4}:="Apr"
 $aCategories{5}:="Mai"
 $aCategories{6}:="Jun"
 $aCategories{7}:="Jul"
 $aCategories{8}:="Aug"
 $aCategories{9}:="Sep"
 $aCategories{10}:="Okt"
 $aCategories{11}:="Nov"
 $aCategories{12}:="Dez"
 
  `Erstelle Auswahl der Datensätze für das Diagramm
  `Speichere Datensätze in einer Menge zur späteren Verwendung
 QUERY BY FORMULA([Antwortzeit];Year of([Antwortzeit]Datum der Anfrage)=2000)
 CREATE SET([Antwortzeit];"MDatenDiagramm")
 
  `Array Reihen festlegen und mit den Abteilungsnamen füllen
 ARRAY STRING(20;$aSeries;0)
 DISTINCT VALUES([Antwortzeit]Abteilung;$aSeries)
 
  `Anzahl der Werte für das Diagramm festlegen
  `(Anzahl der Werte = Kategorien * Reihen)
  `Größe des Arrays Werte
 ARRAY REAL($aValues;12*Size of array($aSeries))
 
  `Array Werte festlegen und füllen
  `Ermittle für jede Abteilung die durchschnittliche Bearbeitungszeit pro Monat
 $Counter:=0 `Zähler zum Verwalten der Werte
 For($x;1;Size of array($aSeries)) `…durchlaufe die Anzahl der Abteilungen
    For($y;1;12) `…durchlaufe die 12 Monate
       $Counter:=$Counter+1
       QUERY SELECTION([Antwortzeit];[Antwortzeit]Abteilung=$aSeries{$x})
       QUERY SELECTION BY FORMULA([Antwortzeit];Month of([Antwortzeit]Datum der Anfrage)=$y)
       If(Records in selection([Antwortzeit])>0)
          $Duration:=0 `Zähler zum Erhöhen der Dauer
          For($z;1;Records in selection([Antwortzeit]))
             GOTO SELECTED RECORD([Antwortzeit];$z)
             $Duration:=$Duration+([Antwortzeit]Datum der Antwort-[Antwortzeit]Datum der Anfrage)
          End for
          $aValues{$Counter}:=$Duration/Records in selection([Antwortzeit])
       End if
       USE SET("MDatenDiagramm") `Speichere Originalauswahl der Datensätze
    End for
 End for
 
  `Oberflächenelemente ausblenden
 CT SET DISPLAY(Bereich;1;0) `Menüleiste ausblenden
 CT SET DISPLAY(Bereich;2;0) `Chart Toolbar ausblenden
 CT SET DISPLAY(Bereich;3;0) `Objekt Toolbar ausblenden
 CT SET DISPLAY(Bereich;6;0) `Rollbalken ausblenden
 CT SET DISPLAY(Bereich;9;0) `Lineal ausblenden
 
  `Erstelle Säulendiagramm
 $Chart:=CT Chart arrays(Bereich;2;1;$aCategories;$aSeries;$aValues)
 
  `Füge Bezeichnung für die Achsen Kategorie und Wert hinzu
 CT SET TITLE ATTRIBUTES(Bereich;$Chart;2;2;3;"Antwortzeit in Tagen")
 CT SET TITLE ATTRIBUTES(Bereich;$Chart;0;3;0;"Anfragen pro Monat")
 
  `Setze Farben für Reihen (Grün, Gelb, Blau)
 CT SET CHART FILL ATTRIBUTES(Bereich;$Chart;8;100;3;CT Index to color(10))
 CT SET CHART FILL ATTRIBUTES(Bereich;$Chart;8;200;3;CT Index to color(2))
 CT SET CHART FILL ATTRIBUTES(Bereich;$Chart;8;300;3;CT Index to color(7))
 
  `Setze Position der Legende auf oben zentriert, horizontal ausgerichtet
 CT SET LEGEND ATTRIBUTES(Bereich;$Chart;1;0;0;0;7;0;0)
 
  `Füge oben links Diagrammtitel hinzu
 $Title:=CT Draw text(Bereich;1;1;300;3;"Durchschnittliche Antwortzeit pro Abteilung")
 
  `Setze Format für Diagrammtitel (Palatino, 14 Punkt, Fett, Zentriert, Schwarz)
 $Color:=CT Index to color(16)
 $Font:=CT Font number("Palatino")
 CT SET TEXT ATTRIBUTES(Bereich;$Title;$Font;14;1;$Color;1)
 
  `Erhalte Größe des Bereichs zum Zentrieren
 CT GET AREA BOUNDARY(Bereich;1;$Left;$Top;$Right;$Bottom)
 
  `Passe Diagramm an die Fenstergröße minus 50 Punkt an
 CT SIZE(Bereich;$Chart;$Right-50;$Bottom-50)
 
  `Zentriere Diagramm
 CT GET BOUNDARY(Bereich;$Chart;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Right-$Left)-($Right2-$Left2))/2
 CT MOVE(Bereich;$Chart;$Locate;$Top2)
 
  `Zentriere Diagrammtitel
 CT GET BOUNDARY(Bereich;$Title;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Right-$Left)-($Right2-$Left2))/2
 CT MOVE(Bereich;$Title;$Locate;$Top2)
 
  `Bewege Diagramm 10 Punkt nach unten
 CT GET BOUNDARY(Bereich;$Chart;$Left;$Top;$Right;$Bottom)
 CT MOVE(Bereich;$Chart;$Left;$Top+10)
 
  `Alle Objekte abwählen
 CT SELECT(Bereich;-1;0)

Nehmen wir an, Sie sind Leiter eines Ausbildungsprogramms für Bayern und möchten feststellen, ob sich die Testergebnisse der Auszubildenden ihres Bundeslandes verbessert haben. Ihre Datenbank enthält die Punktzahlen der Auszubildenden der verschiedenen Bundesländer, sortiert nach Testdatum und Bundesland.

Hinweis: Die Daten stammen aus dem Beispiel Zweidimensionales Diagramm mit Reihen aus Daten von Datensätzen im Abschnitt Diagramme aus Datensätzen einer Datenbank (Beispiele).

Die Tabelle lautet:

Da es in jedem Jahr mehrere Testdaten gab, können Sie die Daten nicht direkt aus der Datenbank darstellen. Stattdessen erstellen Sie eine Methode, die die Daten in Arrays legt. So können Sie jedes Jahr als Kategorie und die einzelnen Bundesländer als Reihen verwenden.

Dieses Diagramm wurde mit der Methode 3D DIAGRAMM TESTERGEBNISSE erstellt. Diese Methode füllt die Arrays mit Daten, generiert ein Diagramm aus den Arrays und gestaltet dann einige Aspekte des Diagramms.

Der Inhalt des Arrays Kategorien wird fest vorgegeben. Der Inhalt des Arrays Reihen stammt aus der Datenbank. Der Inhalt des Array Werte ergibt sich aus dem Durchschnitt der Testergebnisse jedes Bundeslandes pro Jahr. Die Größe des Arrays Werte ist gleich der Größe des Arrays Kategorien multipliziert mit der Größe des Array Reihen.

Über 4D Chart Befehle werden die Menüleiste, Rollbalken, Lineale und Werkzeugpaletten von 4D Chart ausgeblendet. Der 4D Chart Bereich wird auf nicht-eingebbar gesetzt, d.h. der Benutzer kann weder ein Objekt im Bereich auswählen, noch Änderungen ausführen.

Die Methode 3D DIAGRAMM TESTERGEBNISSE lautet:

  `Methode:3D DIAGRAMM TESTERGEBNISSE
  `Kategorien: Jahre
  `Reihen: Bundesländer
  `Werte: Testergebnisse
 
 C_LONGINT($x;$y;$z;$Counter)
 C_LONGINT($Left;$Top;$Right;$Bottom)
 C_LONGINT($Left2;$Top2;$Right2;$Bottom2)
 C_LONGINT($Area;$Chart;$Title;$Locate;$Score;$Color;$Font;$Rect)
 
  `Definiere und fülle das Array Kategorien
 ARRAY STRING(4;$aCategories;2)
 $aCategories{1}:="2000"
 $aCategories{2}:="2001"
 
  `Definiere und fülle das Array Reihen mit den Namen der Bundesländer
 ALL RECORDS([Testergebnisse])
 ARRAY STRING(20;$aSeries;0)
 DISTINCT VALUES([Testergebnisse]Bundesland;$aSeries)
 
  `Ausmaß des Array Werte
  `(Anzahl der zu zeichnenden Werte = Kategorien * Reihen)
 ARRAY REAL($aValues;2*Size of array($aSeries))
 
  `Bestimme und fülle das Array Werte
  `Finde für jedes Bundesland die durchschnittl. Punktezahl
 $Counter:=0 `Zähler zum Verwalten der Werte
 For($x;1;Size of array($aSeries)) `…durchlaufe für die Anzahl der Bundesländer
    For($y;1;2) `…durchlaufe für die 2 Jahre
       $Counter:=$Counter+1
       QUERY([Testergebnisse];[Testergebnisse]Bundesland=$aSeries{$x})
       QUERY SELECTION BY FORMULA([Testergebnisse];
       String(Year of([Testergebnisse]Testdatum))=$aCategories{$y})
       If(Records in selection([Testergebnisse])>0)
          $Score:=0 `Temp Speichern für steigende Punkte
          For($z;1;Records in selection([Testergebnisse]))
             GOTO SELECTED RECORD([Testergebnisse];$z)
             $Score:=$Score+[Testergebnisse]Punkte
          End for
  `Durchschnitt der Punkte
          $aValues{$Counter}:=$Score/Records in selection([Testergebnisse])
       End if
    End for
 End for
 
  `Auswahl wiederherstellen
 ALL RECORDS([Testergebnisse])
 
  `Elemente der Oberfläche ausblenden
 CT SET DISPLAY(Bereich;1;0) `Menüs ausblenden
 CT SET DISPLAY(Bereich;2;0) `Diagrammwerkzeuge ausblenden
 CT SET DISPLAY(Bereich;3;0) `Objektwerkzeuge ausblenden
 CT SET DISPLAY(Bereich;6;0) `Rollbalken ausblenden
 CT SET DISPLAY(Bereich;9;0) `Lineale ausblenden
 
  ` 3D Säulendiagramm erstellen
 $Chart:=CT Chart arrays(Bereich;100;1;$aCategories;$aSeries;$aValues)
 
  `Achsenbezeichnung ein/ausblenden
 CT SET TITLE ATTRIBUTES(Bereich;$Chart;0;3;0;"Geprüftes Jahr")
 CT SET TITLE ATTRIBUTES(Bereich;$Chart;1;1;0;"Bundesland") `Titel ausblenden
 CT SET TITLE ATTRIBUTES(Bereich;$Chart;2;2;3;"Durchschnittsergebnis (in Punkt)")
 
  `Position der Legende setzen auf oben zentriert, horizontale Ausrichtung
 CT SET LEGEND ATTRIBUTES(Bereich;$Chart;1;0;0;0;7;0;0)
 
  `Diagrammtitel in die obere linke Ecke setzen
 $Title:=CT Draw text(Bereich;1;1;350;3;"Testergebnisse Azubis in Deutschland")
 
  `Format für Diagrammtitel (Geneva, 14 Punkt, Fett, Zentriert, Blau)
 $Color:=CT Index to color(7)
 $Font:=CT Font number("Geneva")
 CT SET TEXT ATTRIBUTES(Bereich;$Title;$Font;14;1;$Color;1)
 
  `Erhalte Fenstergröße zur Zentrierung
 CT GET AREA BOUNDARY(Bereich;1;$Left;$Top;$Right;$Bottom)
 
  `Passe Diagramm an die Fenstergröße minus 50 Punkt an
 CT SIZE(Bereich;$Chart;$Right-50;$Bottom-50)
 
  `Zentriere Diagramm horizontal
 CT GET BOUNDARY(Bereich;$Chart;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Right-$Left)-($Right2-$Left2))/2
 CT MOVE(Bereich;$Chart;$Locate;$Top2)
 
  `Richte Titel horizontal aus
 CT GET BOUNDARY(Bereich;$Title;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Right-$Left)-($Right2-$Left2))/2
 CT MOVE(Bereich;$Title;$Locate;$Top2)
 
  `Bewege Diagramm vom Titel 10 Punkt nach unten
 CT GET BOUNDARY(Bereich;$Chart;$Left;$Top;$Right;$Bottom)
 CT MOVE(Bereich;$Chart;$Left;$Top+10)
 
  `Setze um Diagramm und Titel graues Rechteck
 $Rect:=CT Draw rectangle(Bereich;$Left-2;$Top2-2;$Right+2;$Bottom+2+10;0)
 CT SET FILL ATTRIBUTES(Bereich;$Rect;3;CT Index to color(13))
 
  `Richte alle Objekte vertikal aus
 CT GET AREA BOUNDARY(Bereich;1;$Left;$Top;$Right;$Bottom)
 CT GET BOUNDARY(Bereich;-1;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Bottom-$Top)-($Bottom2-$Top2))/2
 CT MOVE(Bereich;-1;$Left2;$Locate)
 
  `Setze Rechteck in den Hintergrund
 CT SELECT(Bereich;-1;0) `Alles abwählen
 CT SELECT(Bereich;$Rect;1) `Wähle Rechteck
 CT DO COMMAND(Bereich;24002) `Setze in Hintergrund
 CT SELECT(Bereich;-1;0) `Alles abwählen
 
  `Alle Objekte abwählen
 CT SELECT(Bereich;-1;0)

 
EIGENSCHAFTEN 

Produkt: 4D Chart
Thema: Einleitung

 
SIEHE AUCH 

Diagramme aus Datensätzen einer Datenbank (Beispiele)